package cn.net.trimmer.servlet.demo1.util;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

/**
 * 简单工厂-用于创建类
 * 
 * @author wl
 *
 */
public class Factory<T> {
	// 工厂配置文件
	private static final Properties prop = new Properties();
	static {
		InputStream in = null;
		try {
			// 读取并加载工厂配置文件
			in = Factory.class.getResourceAsStream("/cn/net/trimmer/servlet/demo1/conf/factory.properties");
			prop.load(in);
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			// 关闭资源
			if (in != null) {
				try {
					in.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
	}

	/**
	 * 通过BeanName创建类,beanName 遵循驼峰命名
	 * 
	 * @param BeanName 类名称
	 * @return 类实例
	 */
	@SuppressWarnings("unchecked")
	public T createBean(String BeanName) {
		T object = null;
		try {
			// 从配置文件中读取bean的全类名
			String className = prop.getProperty(BeanName);
			// 类加载
			Class<?> clazz = Class.forName(className);
			// 创建实例
			object = (T) clazz.newInstance();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return object;
	}
}
